package 中等.数学;

/**
 * 给你两个正整数 n 和 limit 。
 * 请你将 n 颗糖果分给 3 位小朋友，确保没有任何小朋友得到超过 limit 颗糖果，请你返回满足此条件下的 总方案数 。
 *
 * @ https://leetcode.cn/problems/distribute-candies-among-children-ii/description/?envType=daily-question&envId=2025-06-01
 * @date 2025/06/02
 */
public class 给小朋友们分糖果II_2929 {

    public static void main(String[] args) {

        System.out.println(new 给小朋友们分糖果II_2929().distributeCandies(1, 3));

    }

    /**
     * 数学
     * 第一个 x 和第二个小朋友 y 的糖果数量确定的时候，第三个小朋友的数量也就确定了 n-x-y
     * 枚举第一个小朋友数量 x
     * 如果剩下 n-x > 2*limit 那么不能成立
     * 否则第三个小朋友数量要小于等于limit n-x-y <= limit --> n-x-limit <= y
     * 第二个小朋友的数量范围 [Math.max(0,n-x-limit),limit]
     */
    public long distributeCandies(int n, int limit) {

        long ans = 0;
        for (int x = 0; x <= limit; x++) {
            if (n - x > 2 * limit) {
                continue;
            }
            if (Math.min(n - x, limit) >= Math.max(0, n - x - limit)) {
                ans += Math.min(n - x, limit) - Math.max(0, n - x - limit) + 1;
            }
        }
        return ans;

    }

}
